//! # RustCloud Auth - 企业级安全框架
//!
//! RustCloud Auth 是一个高性能、类型安全的企业级认证授权框架，为微服务提供统一的安全解决方案。
//! 基于 rustcloud-security 基础模块，提供具体的认证服务实现。
//!
//! ## 核心特性
//!
//! * **集成现有实现** - 集成 rustcloud-gateway 和 rustcloud-security 中的认证提供者
//! * **高级服务层** - 提供统一的认证授权服务接口
//! * **RBAC 权限控制** - 基于角色的访问控制
//! * **安全审计** - 完整的安全事件记录和审计
//! * **服务间认证** - mTLS 和服务令牌支持
//! * **高性能** - 基于 Tokio 异步运行时
//! * **类型安全** - 充分利用 Rust 的类型系统
//!
//! ## 快速开始
//!
//! ```rust,no_run
//! use rustcloud_auth::prelude::*;
//!
//! #[tokio::main]
//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
//!     // 创建认证服务
//!     let auth_service = AuthServiceBuilder::new()
//!         .with_gateway_integration() // 使用 gateway 中的 JWT/API Key 实现
//!         .with_rbac_enabled()
//!         .build()
//!         .await?;
//!
//!     // 认证和授权
//!     let context = AuthContext::new(
//!         Default::default(),
//!         "GET".to_string(),
//!         "/api/users".to_string(),
//!         Some("127.0.0.1".to_string()),
//!     );
//!     
//!     let principal = auth_service.authenticate(&context).await?;
//!     let resource = Resource::new("user-service", "/api/users", "GET");
//!     let authorized = auth_service.authorize(&principal, &resource).await?;
//!
//!     Ok(())
//! }
//! ```
//!
//! ## 模块结构
//!
//! - [`providers`] - 认证提供者集成（依赖 rustcloud-gateway）
//! - [`rbac`] - 基于角色的访问控制
//! - [`audit`] - 安全审计和事件记录
//! - [`service`] - 认证授权服务
//! - [`middleware`] - Web 框架中间件集成
//! - [`config`] - 配置管理
//! - [`utils`] - 工具函数和辅助类

// 重新导出 rustcloud-security 的所有核心类型
pub use rustcloud_security::prelude::*;

// 认证服务实现模块
pub mod providers;

#[cfg(feature = "rbac")]
pub mod rbac;

#[cfg(feature = "audit")]
pub mod audit;

pub mod service;

#[cfg(any(feature = "axum-integration", feature = "gateway-integration"))]
pub mod middleware;

pub mod config;
pub mod utils;

// 认证服务的具体实现
pub use service::{AuthService, AuthServiceBuilder};

// 重新导出配置
pub use config::{AuthConfig, SecurityConfig};

/// 便捷的预导入模块
///
/// 包含最常用的类型和功能，可以通过 `use rustcloud_auth::prelude::*;` 导入。
pub mod prelude {
    // 从rustcloud-security导入所有核心类型
    pub use rustcloud_security::prelude::*;
    
    // 导入认证服务
    pub use crate::service::{AuthService, AuthServiceBuilder};
    pub use crate::config::{AuthConfig, SecurityConfig};
    
    // 从 rustcloud-gateway 导入认证提供者
    #[cfg(feature = "gateway-integration")]
    pub use crate::providers::{JwtProvider, ApiKeyProvider, JwtConfig, ApiKeyConfig};
    
    #[cfg(feature = "oauth2")]
    pub use crate::providers::oauth2::{OAuth2Provider, OAuth2Config};
    
    #[cfg(feature = "rbac")]
    pub use crate::rbac::{RoleManager, PermissionManager, PolicyEngine};
    
    #[cfg(feature = "audit")]
    pub use crate::audit::{SecurityAuditor, AuditEvent, SecurityEvent};
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_module_exports() {
        // 基础类型可用性测试（现在从rustcloud-security导入）
        let _context = AuthContext::new(
            Default::default(),
            "GET".to_string(),
            "/test".to_string(),
            None,
        );
        
        let _principal = Principal::new(
            "test_user".to_string(),
            "Test User".to_string(),
            PrincipalType::User,
        );
        
        let _resource = Resource::new(
            "test-service".to_string(),
            "/api/test".to_string(),
            "GET".to_string(),
        );
    }
}